﻿Imports CrystalDecisions.CrystalReports.Engine
Imports System.Math
Imports WiremetModel.Entities.Tracking
Imports WiremetModel.Specification.GeneralSpecifications
Imports WiremetModel.Entities

Public Class frmKontrola

    Private mvarChanged As Boolean

    Private _unitOfWork As UnitOfWork


    Private _pozycjaZlecenia As PozycjaZlecenia
    Private _drutKontroli As Kontrola
    Private _WyznInformacje As Boolean
    Private _lock As Locks.Lock
    Private _WyznTylkoDoOdczytu As Boolean = False
    Private _komunikat As String

    Public Sub New(pozycjaZlecenia As PozycjaZlecenia)

        ' To wywołanie jest wymagane przez projektanta.
        InitializeComponent()

        ' Dodaj inicjację po wywołaniu funkcji InitializeComponent().
        _unitOfWork = New UnitOfWork()
        _pozycjaZlecenia = pozycjaZlecenia
        '  Blokowanie()

        OdswiezWidok()
    End Sub

    Private Sub OdswiezWidok()
        PobierzWszystkiePakowania()
        PobierzWszystkiePracownikow()
        PobierzWszystkieZwickUstawienia()
        UzupelnijDane()
    End Sub

    Private Sub PobierzWszystkiePakowania()

        Dim repoOpakowania As New Repository(Of OEM.Pakowanie)(_unitOfWork)
        Dim opakowania As IEnumerable(Of OEM.Pakowanie) = repoOpakowania.GetAll()
        InitializeComboBox(cmbPakowanie, opakowania)

    End Sub

    Private Sub PobierzWszystkiePracownikow()

        Dim repoPracownicy As New Repository(Of OEM.Pracownik)(_unitOfWork)
        Dim pracownicy As IEnumerable(Of OEM.Pracownik) = repoPracownicy.GetAll()
        InitializeComboBox(cmbKtoZatwierdzil, pracownicy)

    End Sub

    Private Sub PobierzWszystkieZwickUstawienia()

        Dim repoZwick As New Repository(Of ZwickUstawienie)(_unitOfWork)
        Dim zwickLista As IEnumerable(Of ZwickUstawienie) = repoZwick.GetAll()
        InitializeComboBox(cmbZwickUstawienie, zwickLista)
        cmbZwickUstawienie.DisplayMember = "Nazwa"

    End Sub

    Private Sub InitializeComboBox(ByRef inputComboBox As ComboBox, ByVal data As IEnumerable(Of Object))
        inputComboBox.DataSource = New BindingSource(data, Nothing)
        inputComboBox.AutoCompleteCustomSource.Clear()
        inputComboBox.AutoCompleteCustomSource.AddRange(data.Select(Function(x) x.ToString()).ToArray())
        inputComboBox.SelectedIndex = -1
    End Sub


    Private Sub WyczyscParametryKontroli()

        txtWymiarMin.Text = String.Empty
        txtWymiarMax.Text = String.Empty
        txtIlosc.Text = String.Empty
        '  cmbPakowanie.SelectedIndex = -1
        txtUwagi.Text = String.Empty
        chkGotowe.Checked = False
        chkMagazyn.Checked = False
        chkMagazyn2.Checked = False
        chkPoprawa.Checked = False
        txtZwickPomiar.Text = String.Empty
        txtZwickProcentWydluzenia.Text = String.Empty
        txtZwickSila.Text = String.Empty
        ' cmbZwickUstawienie.SelectedIndex = -1
        txtZwickWytrzymalosc.Text = String.Empty
        cmdDodaj.Enabled = True
        cmdDrukuj.Enabled = False
        grbEtykiety.Enabled = False
        grbParametry.Enabled = False
        txtNumerDrutu.Focus()

    End Sub

    Private Sub Blokowanie()

        Dim repoLock As New Repository(Of Locks.Lock)(_unitOfWork)
        _lock = New Locks.Lock()
        _lock.RecordLocked = _pozycjaZlecenia.Id
        _lock.TableName = "tracking.pozycja_zlecenia"
        _lock.RequestedBy = User.Id
        _lock.Status = True

        Dim lockSpec As New LocksSpecifications.LockSpecification(_lock.TableName, _lock.RecordLocked)
        Dim existingLock As Locks.Lock = repoLock.GetEntityMatching(lockSpec)

        Try
            If Not IsNothing(existingLock) AndAlso _lock.RequestedBy <> User.Id Then
                Dim pracownicyRepo As New Repository(Of OEM.Pracownik)(_unitOfWork)
                Dim pracownikSpec As New IdSpecification(Of OEM.Pracownik)(existingLock.RequestedBy)
                Dim pracownikBlokada As OEM.Pracownik = pracownicyRepo.GetEntityMatching(pracownikSpec)

                Dim bloker As String = If(IsNothing(pracownikBlokada), "nie znaleziono pracownika", pracownikBlokada.ToString())
                MessageBox.Show("TYLKO DO ODCZYTU" & vbNewLine & "Blokuje pracownik: " & bloker, "WIREMET")
                grbTylkoDoOdczytu.Visible = True
                txtInfUwagi.Location = New Point(580, 42)
                txtInfUwagi.Size = New Size(147, 44)
                lblInfUwagi.Location = New Point(544, 42)

            ElseIf _WyznTylkoDoOdczytu Then
                MessageBox.Show("TYLKO DO ODCZYTU")
                grbTylkoDoOdczytu.Visible = True
                txtInfUwagi.Location = New Point(580, 42)
                txtInfUwagi.Size = New Size(147, 44)
                lblInfUwagi.Location = New Point(544, 42)
            Else
                _unitOfWork.BeginTransaction()
                repoLock.Add(_lock)
                _unitOfWork.CommitTransaction()
            End If
        Catch ex As Exception
            If Not _unitOfWork.WasTransactionRolledBack Then
                _unitOfWork.RollbackTransaction()
                _unitOfWork = New UnitOfWork()
                OdswiezWidok()
            End If
            MessageBox.Show(ex.Message, "Błąd", MessageBoxButtons.OK, MessageBoxIcon.Error)
        End Try

        
    End Sub


    Function SprawdzenieDanych() As Boolean
        'Sprawdzenie czy użtkownik wpisał wszystkie dane oraz czy są to liczby
        If Not chkPoprawa.Checked Then
            If cmbPakowanie.SelectedIndex = -1 Or txtWymiarMin.Text = String.Empty Or txtWymiarMax.Text = String.Empty Or txtIlosc.Text = String.Empty Or txtZwickPomiar.Text = String.Empty Or txtZwickProcentWydluzenia.Text = String.Empty Or txtZwickSila.Text = String.Empty Or cmbZwickUstawienie.SelectedIndex = -1 Or txtZwickWytrzymalosc.Text = String.Empty Or (Not chkGotowe.Checked And Not chkMagazyn.Checked And Not chkMagazyn2.Checked And Not chkPoprawa.Checked) Then
                MessageBox.Show("Podaj wszystkie dane?", "WIREMET")
                Return False
            Else
                If Not SprawdzLiczbeZmiennoprzecinkowa(txtWymiarMin.Text, txtWymiarMax.Text, txtIlosc.Text, txtZwickPomiar.Text, txtZwickProcentWydluzenia.Text, txtZwickSila.Text, txtZwickWytrzymalosc.Text) Then
                    MessageBox.Show("Podaj poprawnie dane!", "WIREMET")
                    Return False
                Else
                    Return True
                End If
            End If
        Else
            Return True
        End If

    End Function

    Function SprawdzLiczbeZmiennoprzecinkowa(Liczba1 As String, Liczba2 As String, Liczba3 As String, Liczba4 As String, Liczba5 As String, Liczba6 As String, Liczba7 As String) As Boolean

        If Liczba1 <> String.Empty And IsNumeric(Liczba1) And Liczba2 <> String.Empty And IsNumeric(Liczba2) And Liczba3 <> String.Empty And IsNumeric(Liczba3) And Liczba4 <> String.Empty And IsNumeric(Liczba4) And Liczba5 <> String.Empty And IsNumeric(Liczba5) And Liczba6 <> String.Empty And IsNumeric(Liczba6) And Liczba7 <> String.Empty And IsNumeric(Liczba7) Then
            If CDbl(Liczba1) > 0 And CDbl(Liczba2) > 0 And CDbl(Liczba3) > 0 And CDbl(Liczba4) > 0 And CDbl(Liczba5) > 0 And CDbl(Liczba6) > 0 And CDbl(Liczba7) > 0 Then
                Return True
            Else
                Return False
            End If
        Else
            Return False
        End If

    End Function

    Function ObliczAktualnaWage(OpcjaId As Integer) As Double

        Dim drutRepo As New Repository(Of Drut)(_unitOfWork)
        Dim drutyPoKontroli As IEnumerable(Of Drut) = _pozycjaZlecenia.Schematy.
            SelectMany(Function(x) x.Value.PozycjeSchematu).
            SelectMany(Function(x) x.Value.Druty).Select(Function(x) x.Value).
            Where(Function(x) x.Opcja.Id = 4 AndAlso x.Kontrola.Any(Function(y) y.Opcja.Id = OpcjaId))

        Dim weight As Double = 0

        For Each drut As Drut In drutyPoKontroli
            If drut.Opcja.Id = 5 Then
                For Each rodzic As Rodzic In drut.Rodzice
                    weight += rodzic.Waga
                Next
            Else
                weight += If(Not IsNothing(drut.Kontrola) AndAlso drut.Kontrola.Any(), drut.Kontrola.First().Ilosc, 0)
            End If
        Next
        Return weight
    End Function


    Private Sub SzukajDrutuDoKontroli()
        Dim recordNumber As Integer = 0
        
        If _pozycjaZlecenia.StatusId <> 6 Then

            Dim drutyDoKontroli As IEnumerable(Of Drut) = _pozycjaZlecenia.Schematy.
            SelectMany(Function(x) x.Value.PozycjeSchematu).
            SelectMany(Function(x) x.Value.Druty).Select(Function(x) x.Value).
            Where(Function(x) x.Opcja.Id = 4 AndAlso Not x.Kontrola.Any()).
            OrderBy(Function(x) x.Id)

            dgvListaDoKontroli.Rows.Clear()
            For Each drut As Drut In drutyDoKontroli
                recordNumber += 1
                dgvListaDoKontroli.Rows.Add(recordNumber, drut.Id)
            Next
            dgvListaDoKontroli.ClearSelection()
            OdswiezWageDrutuDoKontroli(drutyDoKontroli.Sum(Function(x) x.Rodzice.Sum(Function(y) y.Waga)))
        Else
            MsgBox("Zlecenie zakończone.")
            grbTylkoDoOdczytu.Visible = True
        End If

    End Sub

    Private Sub Statystyka()
        lblGotowe.Text = ObliczAktualnaWage(6).ToString()
        lblMagazyn.Text = ObliczAktualnaWage(2).ToString()
        lblMagazyn2.Text = ObliczAktualnaWage(7).ToString()
        lblPoprawa.Text = ObliczAktualnaWage(5).ToString()

        Dim wagaCalkowita As Double = _pozycjaZlecenia.Schematy.
            SelectMany(Function(x) x.Value.PozycjeSchematu).
            SelectMany(Function(x) x.Value.Druty).Select(Function(x) x.Value).
            Where(Function(x) x.Opcja.Id = 4 AndAlso Not x.Kontrola.Any()).
            OrderBy(Function(x) x.Id).Sum(Function(x) x.Rodzice.Sum(Function(y) y.Waga))

        OdswiezWageDrutuDoKontroli(wagaCalkowita)
    End Sub

    Private Sub OdswiezWageDrutuDoKontroli(ByVal waga As Double)
        lbl_WagaDrutuDoKontroli.Text = FormatNumber(waga, 2) & " kg"
    End Sub


    Private Sub SzukajDrutuPoKontroli(OpcjaId As Integer)

        Dim drutyPoKontroli As IEnumerable(Of Drut) = _pozycjaZlecenia.Schematy.
            SelectMany(Function(x) x.Value.PozycjeSchematu).
            SelectMany(Function(x) x.Value.Druty).Select(Function(x) x.Value).
            Where(Function(x) x.Opcja.Id = 4 AndAlso x.Kontrola.Any(Function(y) y.Opcja.Id = OpcjaId)).
            OrderBy(Function(x) x.Id)



        Dim recordNumber As Integer = 0
        Dim wagaGotowegoDrutu As Double = 0
        dgvInformacje.Rows.Clear()


        If OpcjaId = 5 Then
            For Each drut As Drut In drutyPoKontroli
                recordNumber += 1
                wagaGotowegoDrutu += drut.Rodzice.Sum(Function(x) x.Waga)
                dgvInformacje.Rows.Add(recordNumber, drut.Id, drut.WymiarMin, drut.WymiarMax, wagaGotowegoDrutu, drut.Pakowanie.Nazwa, "###", "###", "###", "###", "###", drut.Uwagi)
                dgvInformacje.Rows(recordNumber - 1).Tag = drut
            Next
        Else
            For Each drut As Drut In drutyPoKontroli
                Dim kontrola As Kontrola = drut.Kontrola.FirstOrDefault()
                If Not kontrola Is Nothing Then
                    recordNumber += 1
                    dgvInformacje.Rows.Add(
                        recordNumber,
                        drut.Id,
                        kontrola.WymiarMin, kontrola.WymiarMax,
                        kontrola.Ilosc,
                        kontrola.Pakowanie.Nazwa, kontrola.ZwickUstawienie.Nazwa, kontrola.ZwickPomiar, kontrola.ZwickSila, kontrola.ZwickProcentWydluzenia, kontrola.ZwickWytrzymalosc,
                        kontrola.Uwagi
                    )
                    dgvInformacje.Rows(recordNumber - 1).Tag = drut
                End If
            Next
        End If

        'uzupelnienie statystyki
        'lblGotowe.Text = ObliczAktualnaWage(6)
        'lblMagazyn.Text = ObliczAktualnaWage(2)
        'lblMagazyn2.Text = ObliczAktualnaWage(7)
        'lblPoprawa.Text = ObliczAktualnaWage(5)

    End Sub

    Private Sub ZnajdzDrut()

        dgvListaDoKontroli.ClearSelection()
        dgvInformacje.ClearSelection()

        For Each row As DataGridViewRow In dgvListaDoKontroli.Rows
            If CInt(row.Cells("colDrutId").Value) = CInt(txtNumerDrutu.Text) Then 'CType(lvarRow.Tag, clsInhTrDrut).Id = txtNumerDrutu.Text Then
                row.Selected = True
                grbEtykiety.Enabled = True
                grbParametry.Enabled = True
                Exit For
            End If
        Next

        If dgvListaDoKontroli.SelectedRows.Count = 0 Then
            For Each row As DataGridViewRow In dgvInformacje.Rows
                If CType(row.Tag, Drut).Id.ToString().Equals(txtNumerDrutu.Text.Trim()) Then
                    row.Selected = True
                    grbEtykiety.Enabled = True
                    grbParametry.Enabled = True
                    cmdDrukuj.Enabled = True
                    UzupelnijWartosciParametrow()
                    Exit For
                End If
            Next
        End If
        txtWymiarMin.Focus()
        If dgvListaDoKontroli.SelectedRows.Count = 0 And dgvInformacje.SelectedRows.Count = 0 Then
            MessageBox.Show("Nie ma drutu o takim numerze.", "WIEREMET")
            txtNumerDrutu.Text = String.Empty
        End If

    End Sub

    Private Sub ZmianaKoloru()
        lblMagazyn.ForeColor = Color.Black
        lblMagazynNazwa.ForeColor = Color.Black
        lblMagazyn2.ForeColor = Color.Black
        lblMagazyn2Nazwa.ForeColor = Color.Black
        lblPoprawa.ForeColor = Color.Black
        lblPoprawaNazwa.ForeColor = Color.Black
        lblGotowe.ForeColor = Color.Black
        lblGotoweNazwa.ForeColor = Color.Black
    End Sub



    Private Sub UzupelnijDane()

        WyczyscParametryKontroli()
        'uzupelnienie danych zlecenia
        txtInfMaterial.Text = _pozycjaZlecenia.Gatunek.NazwaAng
        txtInfWymiar.Text = _pozycjaZlecenia.Wymiar
        txtInfIlosc.Text = _pozycjaZlecenia.Ilosc & " " & _pozycjaZlecenia.JednostkaMiary.Jednostka
        txtInfTolDolna.Text = _pozycjaZlecenia.TolDolna
        txtInfTolGorna.Text = _pozycjaZlecenia.TolGorna
        txtInfWytrzymaloscMin.Text = _pozycjaZlecenia.WytrzymaloscMin
        txtInfWytrzymaloscMax.Text = _pozycjaZlecenia.WytrzymaloscMax
        txtInfWydluzenie.Text = _pozycjaZlecenia.Wydluzenie
        txtInfSzpula.Text = _pozycjaZlecenia.Pakowanie.Nazwa
        If _pozycjaZlecenia.PowierzonyMaterial Then
            txtInfMagazyn.Size = New Size(148, 41)
            txtInfUwagi.Size = New Size(147, 46)
            txtInfMagazyn.Text = _pozycjaZlecenia.Magazyn.Nazwa
            txtInfMagazyn.Text = txtInfMagazyn.Text & "(MAT. POWIERZ.)"
        Else
            txtInfMagazyn.Text = _pozycjaZlecenia.Magazyn.Nazwa
        End If
        txtInfUwagi.Text = _pozycjaZlecenia.Uwagi

        Dim zlecenie As Zlecenie = _pozycjaZlecenia.Zlecenie

        txtInfKlient.Text = zlecenie.Klient.NazwaSkrocona
        txtInfTerminRealizacji.Text = CDate(zlecenie.Termin).ToShortDateString
        txtInfNumerZlecenia.Text = zlecenie.Numer
        'uzupelnienie dgvListaDoKontroli
        SzukajDrutuDoKontroli()

        'uzupelnienie dgvInformacje
        Statystyka() 'SzukajDrutuPoKontroli(6)
        grbDrutPoKontroli.Text = "Drut gotowy do wysyłki"
        lblGotowe.ForeColor = Color.Red
        lblGotoweNazwa.ForeColor = Color.Red

        'uzupelnienie domyślnych wartości etykiety
        If UCase(zlecenie.Klient.Kraj) = "POLSKA" Then
            chkEtykietaPolska.Checked = True
            chkEtykietaZagraniczna.Checked = False
        Else
            chkEtykietaPolska.Checked = False
            chkEtykietaZagraniczna.Checked = True
        End If
        If CBool(zlecenie.Klient.Etykieta) Then
            chkNazwaFirmy.Checked = True
        Else
            chkNazwaFirmy.Checked = False
        End If

    End Sub

    Private Sub UzupelnijWartosciParametrow()

        If CType(dgvInformacje.SelectedRows(0).Tag, Drut).Kontrola.FirstOrDefault().Opcja.Id = 5 Then
            With dgvInformacje.SelectedRows(0)
                txtNumerDrutu.Text = .Cells("colNumer").Value.ToString()
                txtWymiarMin.Text = Replace(.Cells("colWymiarMin").Value.ToString(), ".", ",")
                txtWymiarMax.Text = Replace(.Cells("colWymiarMax").Value.ToString(), ".", ",")

                txtIlosc.Text = Replace(.Cells("colIlosc").Value.ToString(), ".", ",")
                cmbPakowanie.Text = .Cells("colPakowanie").Value.ToString()
                txtUwagi.Text = .Cells("colUwagi").Value.ToString()
                chkPoprawa.Checked = True
            End With
        Else
            Dim kontrola As Kontrola = CType(dgvInformacje.SelectedRows(0).Tag, Drut).Kontrola.FirstOrDefault()

            txtNumerDrutu.Text = kontrola.Drut.Id.ToString()
            txtWymiarMin.Text = Replace(kontrola.WymiarMin.ToString(), ".", ",")
            txtWymiarMax.Text = Replace(kontrola.WymiarMax.ToString(), ".", ",")

            txtIlosc.Text = Replace(kontrola.Ilosc.ToString(), ".", ",")
            cmbPakowanie.Text = kontrola.Pakowanie.Nazwa
            txtUwagi.Text = kontrola.Uwagi
            Select Case kontrola.Opcja.Id
                Case 6
                    chkGotowe.Checked = True
                Case 2
                    chkMagazyn.Checked = True
                Case 7
                    chkMagazyn2.Checked = True
                Case 5
                    chkPoprawa.Checked = True
            End Select
            txtZwickPomiar.Text = Replace(kontrola.ZwickPomiar.ToString(), ".", ",")
            txtZwickProcentWydluzenia.Text = Replace(kontrola.ZwickProcentWydluzenia.ToString(), ".", ",")
            txtZwickSila.Text = Replace(kontrola.ZwickSila.ToString(), ".", ",")
            cmbZwickUstawienie.Text = kontrola.ZwickUstawienie.Nazwa
            txtZwickWytrzymalosc.Text = Replace(kontrola.ZwickWytrzymalosc.ToString(), ".", ",")
        End If



    End Sub


    Private Sub Dodaj()

        Try

            Dim drutRepo As New Repository(Of Drut)(_unitOfWork)
            Dim drutSpec As New IdSpecification(Of Drut)(CInt(txtNumerDrutu.Text))
            Dim drut As Drut = drutRepo.GetEntityMatching(drutSpec)

            Dim sumaIlosci As Double = 0
            If chkPoprawa.Checked Then
                If lblPoprawa.Text.Equals("0") Then
                    DodajPozycjePoprawyDoSchematu()
                End If

                Dim repoOpcja As New Repository(Of Opcja)(_unitOfWork)
                Dim opcjaSpec As New IdSpecification(Of Opcja)(5)

                Dim kontrola As Kontrola = drut.Kontrola.FirstOrDefault()
                kontrola.Pracownik = User
                kontrola.Uwagi = txtUwagi.Text
                kontrola.Opcja = repoOpcja.GetEntityMatching(opcjaSpec)
                kontrola.DataUtworzenia = Date.Now
                drut.Kontrola.Clear()
                drut.Kontrola.Add(kontrola)


                _unitOfWork.BeginTransaction()
                drutRepo.Update(drut)
                _unitOfWork.CommitTransaction()
            Else

                Dim kontrola As New Kontrola()
                With kontrola
                    .Drut = drut
                    .WymiarMin = CDbl(txtWymiarMin.Text)
                    .WymiarMax = CDbl(txtWymiarMax.Text)
                    .Ilosc = CDbl(txtIlosc.Text)
                    .Pracownik = User
                    .Pakowanie = CType(cmbPakowanie.SelectedItem, OEM.Pakowanie)

                    .Uwagi = txtUwagi.Text
                    Dim opcjaId As Integer = 0

                    If chkGotowe.Checked Then
                        opcjaId = 6
                    ElseIf chkMagazyn.Checked Then
                        opcjaId = 2
                    ElseIf chkMagazyn2.Checked Then
                        opcjaId = 7
                    Else
                        opcjaId = 5
                    End If

                    Dim repoOpcja As New Repository(Of Opcja)(_unitOfWork)
                    Dim opcjaSpec As New IdSpecification(Of Opcja)(opcjaId)
                    .Opcja = repoOpcja.GetEntityMatching(opcjaSpec)


                    .ZwickPomiar = CDbl(txtZwickPomiar.Text)
                    .ZwickProcentWydluzenia = CDbl(txtZwickProcentWydluzenia.Text)
                    .ZwickSila = CDbl(txtZwickSila.Text)
                    .ZwickUstawienie = CType(cmbZwickUstawienie.SelectedItem, ZwickUstawienie)
                    .ZwickWytrzymalosc = CDbl(txtZwickWytrzymalosc.Text)
                    .DataUtworzenia = Now.Date
                    If cmbKtoZatwierdzil.SelectedItem <> Nothing Then
                        .KtoZatwierdzilPracownik = CType(cmbKtoZatwierdzil.SelectedItem, OEM.Pracownik)
                    End If
                    _unitOfWork.BeginTransaction()
                    drut.Kontrola.Add(kontrola)
                    _unitOfWork.CommitTransaction()
                End With
            End If

            If chkGotowe.Checked Then
                dgvInformacje.Rows.Add(dgvInformacje.Rows.Count + 1, txtNumerDrutu.Text,
                                       txtWymiarMin.Text, txtWymiarMax.Text, txtIlosc.Text,
                                       CType(cmbPakowanie.SelectedItem, OEM.Pakowanie).Nazwa,
                                       CType(cmbZwickUstawienie.SelectedItem, ZwickUstawienie).Nazwa,
                                       txtZwickPomiar.Text, txtZwickSila.Text, txtZwickProcentWydluzenia.Text, txtZwickWytrzymalosc.Text)
                dgvInformacje.Rows(dgvInformacje.Rows.Count - 1).Tag = drut
                lblGotowe.Text = CStr(CDbl(lblGotowe.Text) + CDbl(txtIlosc.Text))
            ElseIf chkMagazyn.Checked Then
                lblMagazyn.Text = CStr(CDbl(lblMagazyn.Text) + CDbl(txtIlosc.Text))
            ElseIf chkMagazyn2.Checked Then
                lblMagazyn2.Text = CStr(CDbl(lblMagazyn2.Text) + CDbl(txtIlosc.Text))
            Else
                sumaIlosci += CType(dgvListaDoKontroli.SelectedRows(0).Tag, Drut).Rodzice.Sum(Function(x) x.Waga)
                lblPoprawa.Text = CStr(CDbl(lblPoprawa.Text) + sumaIlosci)
            End If

            If Not chkPoprawa.Checked Then
                Drukuj()
            End If

            If dgvInformacje.SelectedRows.Count > 0 Then
                dgvInformacje.ClearSelection()
            End If

            mvarChanged = False

            WyczyscParametryKontroli()
            txtNumerDrutu.Text = String.Empty
            dgvListaDoKontroli.Rows.Clear()
            SzukajDrutuDoKontroli()


        Catch ex As Exception
            MessageBox.Show(ex.Message, "Błąd", MessageBoxButtons.OK, MessageBoxIcon.Error)
        End Try
    End Sub

    Private Sub Zmien()

        Try
            With _drutKontroli
                .WymiarMin = CDbl(txtWymiarMin.Text)
                .WymiarMax = CDbl(txtWymiarMax.Text)
                .Ilosc = CDbl(txtIlosc.Text)
                .Pracownik = User
                .Pakowanie = CType(cmbPakowanie.SelectedItem, OEM.Pakowanie)
                .Uwagi = txtUwagi.Text

                Dim opcjaId As Integer

                If chkGotowe.Checked Then
                    opcjaId = 6
                ElseIf chkMagazyn.Checked Then
                    opcjaId = 2
                ElseIf chkMagazyn2.Checked Then
                    opcjaId = 7
                Else
                    If lblPoprawa.Text.Equals("0") Then
                        DodajPozycjePoprawyDoSchematu()
                    End If
                    opcjaId = 5
                End If

                Dim repoOpcja As New Repository(Of Opcja)(_unitOfWork)
                Dim opcjaSpec As New IdSpecification(Of Opcja)(opcjaId)
                .Opcja = repoOpcja.GetEntityMatching(opcjaSpec)


                .ZwickPomiar = CDbl(txtZwickPomiar.Text)
                .ZwickProcentWydluzenia = CDbl(txtZwickProcentWydluzenia.Text)
                .ZwickSila = CDbl(txtZwickSila.Text)
                .ZwickUstawienie = CType(cmbZwickUstawienie.SelectedItem, ZwickUstawienie)
                .ZwickWytrzymalosc = CDbl(txtZwickWytrzymalosc.Text)
                If cmbKtoZatwierdzil.SelectedItem <> Nothing Then
                    .KtoZatwierdzilPracownik = CType(cmbKtoZatwierdzil.SelectedItem, OEM.Pracownik)
                Else
                    .KtoZatwierdzilPracownik = Nothing
                End If

                _unitOfWork.BeginTransaction()
                Dim repoKontrola As New Repository(Of Kontrola)(_unitOfWork)
                repoKontrola.Update(_drutKontroli)
                _unitOfWork.CommitTransaction()
            End With

            WyczyscParametryKontroli()
            cmdDodaj.Enabled = True
            mvarChanged = False

            SzukajDrutuPoKontroli(6)
            grbDrutPoKontroli.Text = "Drut gotowy do wysyłki"
            ZmianaKoloru()
            lblGotowe.ForeColor = Color.Red
            lblGotoweNazwa.ForeColor = Color.Red

        Catch ex As Exception
            MessageBox.Show(ex.Message, "Błąd", MessageBoxButtons.OK, MessageBoxIcon.Error)
        End Try
    End Sub



    Private Sub Drukuj()

        Try

            If chkMagazyn.Checked Or chkMagazyn2.Checked Then
                'report = New rptEtykietaProdukcja()
                MessageBox.Show("zrobić etykietę magazynu")
            End If


            Using unitOfWork As New UnitOfWork

                Dim report As ReportDocument = New EtykietaKontrola2Report()

                Dim numerDrutu As Integer = Int32.Parse(txtNumerDrutu.Text.Trim())
                report.SetParameterValue("p_id", numerDrutu.ToString())


                Dim drutRepository As IRepository(Of Drut) = New Repository(Of Drut)(unitOfWork)
                Dim drutIdSpecification As ISpecification(Of Drut) = New IdSpecification(Of Drut)(numerDrutu)
                Dim drut As Drut = drutRepository.GetEntityMatching(drutIdSpecification)
                'Dim drutGosi As New clsInhTrDrut(Int32.Parse(txtNumerDrutu.Text.Trim()), mvarDbHolder)
                Dim kontrola As Kontrola = drut.Kontrola.FirstOrDefault()

                If chkEtykietaPolska.Checked Then
                    report.SetParameterValue("p_material", "Gatunek: " & drut.PozycjaSchematu.Schemat.PozycjaZlecenia.Gatunek.NazwaAng)
                    report.SetParameterValue("p_wymiar", "Wymiar: " & drut.PozycjaSchematu.Schemat.PozycjaZlecenia.Wymiar & " mm")
                    report.SetParameterValue("p_waga", "Waga: " & txtIlosc.Text & " kg")
                Else
                    report.SetParameterValue("p_material", "Material: " & drut.PozycjaSchematu.Schemat.PozycjaZlecenia.Gatunek.NazwaAng)
                    report.SetParameterValue("p_wymiar", "Diameter: " & drut.PozycjaSchematu.Schemat.PozycjaZlecenia.Wymiar & " mm")
                    report.SetParameterValue("p_waga", "Weight: " & txtIlosc.Text & " kg")
                End If

                If Not kontrola Is Nothing Then
                    report.SetParameterValue("p_data_utworzenia", kontrola.DataUtworzenia)
                    report.SetParameterValue("p_numer_kontroli", kontrola.Id)
                End If

                report.SetParameterValue("p_pracownik_id", drut.Pracownik.Id)

                If chkWagaBrutto.Checked Then
                    If chkEtykietaPolska.Checked AndAlso Not kontrola Is Nothing Then
                        report.SetParameterValue("p_waga_brutto", "Waga brutto: " & (kontrola.Ilosc + drut.Pakowanie.Waga).ToString() & " kg")
                    Else
                        report.SetParameterValue("p_waga_brutto", "Weight brutto: " & (kontrola.Ilosc + drut.Pakowanie.Waga) & " kg")
                    End If
                Else
                    report.SetParameterValue("p_waga_brutto", "")
                End If


                If chkEtykietaPolska.Checked Then
                    report.SetParameterValue("p_wytop", "Wytop: " + drut.PozycjaSchematu.Schemat.MaterialyProdukcyjne.First().Material.Wytop)
                Else
                    report.SetParameterValue("p_wytop", "Heat: " + drut.PozycjaSchematu.Schemat.MaterialyProdukcyjne.First().Material.Wytop)
                End If



                If chkNazwaFirmy.Checked Then
                    report.SetParameterValue("p_nazwa_firmy", "WIREMET")
                Else
                    report.SetParameterValue("p_nazwa_firmy", "")
                End If


                Dim numerZamowieniaKlienta As String = drut.PozycjaSchematu.Schemat.PozycjaZlecenia.Zlecenie.ZlecenieOEM.NumerZamowieniaKlienta
                If Not String.IsNullOrEmpty(numerZamowieniaKlienta) Then
                    report.SetParameterValue("p_numer_zamowienia_klienta", numerZamowieniaKlienta)
                End If



                report.PrintToPrinter(1, True, 0, 0) 'This prints one copy of all pages to the default printer, and collates them

            End Using

        Catch ex As Exception
            MsgBox(ex.Message)
        End Try
    End Sub


    Private Sub ZmienStatus()
        Try
            Dim repoStatus As New Repository(Of OEM.Status)(_unitOfWork)
            Dim statusSpec As New IdSpecification(Of OEM.Status)(6)
            Dim status As OEM.Status = repoStatus.GetEntityMatching(statusSpec)

            Dim repoPozycjaZlecenia As New Repository(Of PozycjaZlecenia)(_unitOfWork)

            _unitOfWork.BeginTransaction()
            _pozycjaZlecenia.Status = status
            _unitOfWork.CommitTransaction()

        Catch ex As Exception
            MessageBox.Show(ex.Message, "Błąd", MessageBoxButtons.OK, MessageBoxIcon.Error)
        End Try
    End Sub


    Private Sub DodajPozycjePoprawyDoSchematu()
        'Dodanie operacji poprawy do schematu w celu umozliwienia wpisania drutu przez pracownika na produkcji po poprawie
        Try
            Dim drut As Drut

            If dgvListaDoKontroli.SelectedRows.Count > 0 Then
                drut = CType(dgvListaDoKontroli.SelectedRows(0).Tag, Drut)
            Else
                drut = CType(dgvInformacje.SelectedRows(0).Tag, Drut)
            End If

            Dim repoOpcjaPozycjiSchematu As New Repository(Of OpcjaPozycjiSchematu)(_unitOfWork)
            Dim opcjaSpec As New IdSpecification(Of OpcjaPozycjiSchematu)(3)

            Dim pozycjaSchematu As New PozycjaSchematu()
            pozycjaSchematu.Schemat = drut.PozycjaSchematu.Schemat
            pozycjaSchematu.OpcjaPozycjiSchematu = repoOpcjaPozycjiSchematu.GetEntityMatching(opcjaSpec)

            Dim repoPozycjaSchematu As New Repository(Of PozycjaSchematu)(_unitOfWork)

            _unitOfWork.BeginTransaction()
            repoPozycjaSchematu.Add(pozycjaSchematu)
            _unitOfWork.CommitTransaction()
        Catch ex As Exception
            MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
        End Try
    End Sub

    Private Sub lblMagazyn_Click(sender As Object, e As EventArgs) Handles lblMagazyn.Click

        SzukajDrutuPoKontroli(2)
        grbDrutPoKontroli.Text = "Drut przesłany na magazyn"
        ZmianaKoloru()
        lblMagazyn.ForeColor = Color.Red
        lblMagazynNazwa.ForeColor = Color.Red
        WyczyscParametryKontroli()
        txtNumerDrutu.Text = String.Empty

    End Sub

    Private Sub lblMagazyn2_Click(sender As Object, e As EventArgs) Handles lblMagazyn2.Click
        SzukajDrutuPoKontroli(7)
        grbDrutPoKontroli.Text = "Drut przesłany na magazyn 2"
        ZmianaKoloru()
        lblMagazyn2.ForeColor = Color.Red
        lblMagazyn2Nazwa.ForeColor = Color.Red
        WyczyscParametryKontroli()
        txtNumerDrutu.Text = String.Empty
    End Sub

    Private Sub lblPoprawa_Click(sender As Object, e As EventArgs) Handles lblPoprawa.Click
        SzukajDrutuPoKontroli(5)
        grbDrutPoKontroli.Text = "Drut przesłany do poprawy"
        ZmianaKoloru()
        lblPoprawa.ForeColor = Color.Red
        lblPoprawaNazwa.ForeColor = Color.Red
        WyczyscParametryKontroli()
        txtNumerDrutu.Text = String.Empty
    End Sub

    Private Sub lblGotowe_Click(sender As Object, e As EventArgs) Handles lblGotowe.Click
        SzukajDrutuPoKontroli(6)
        grbDrutPoKontroli.Text = "Drut gotowy do wysyłki"
        ZmianaKoloru()
        lblGotowe.ForeColor = Color.Red
        lblGotoweNazwa.ForeColor = Color.Red
        WyczyscParametryKontroli()
        txtNumerDrutu.Text = String.Empty
    End Sub


    Private Sub dgvListaDoKontroli_CellMouseClick(sender As Object, e As DataGridViewCellMouseEventArgs) Handles dgvListaDoKontroli.CellMouseClick

        If Not _WyznTylkoDoOdczytu Then
            grbEtykiety.Enabled = True
            grbParametry.Enabled = True
            cmdDrukuj.Enabled = True
        End If
        txtNumerDrutu.Text = dgvListaDoKontroli.CurrentRow.Cells("colDrutId").Value.ToString()
        WyczyscParametryKontroli()
        ZnajdzDrut()
    End Sub

    Private Sub dgvInformacje_CellMouseClick(sender As Object, e As DataGridViewCellMouseEventArgs) Handles dgvInformacje.CellMouseClick

        If dgvInformacje.SelectedRows.Count > 0 Then
            _drutKontroli = CType(dgvInformacje.SelectedRows(0).Tag, Drut).Kontrola.FirstOrDefault()
            WyczyscParametryKontroli()
            UzupelnijWartosciParametrow()
            If Not _WyznTylkoDoOdczytu Then
                grbEtykiety.Enabled = True
                grbParametry.Enabled = True
                cmdDodaj.Enabled = False
                cmdDrukuj.Enabled = True
            End If

            'zablokowanie mozliwosc edycji drutu wysłanego juz do klienta
            'If Not clsInhDrutWyslany.SprawdzWysylkeDrut(mvarDbHolder, CType(dgvInformacje.SelectedRows(0).Tag, clsInhTrDrut).Id) Then
            '    grbEtykiety.Enabled = True
            '    grbParametry.Enabled = True
            '    cmdDodaj.Enabled = False
            '    cmdDrukuj.Enabled = True
            'End If

        End If

    End Sub


    Private Sub cmdDodaj_Click(sender As Object, e As EventArgs) Handles cmdDodaj.Click
        If mvarChanged Then
            If SprawdzenieDanych() Then
                Dodaj()
            End If
        Else
            MessageBox.Show("Nie wprowadzono żadnych zmian.", "WIREMET")
        End If
    End Sub

    Private Sub cmdZmien_Click(sender As Object, e As EventArgs) Handles cmdZmien.Click
        If mvarChanged Then
            If dgvInformacje.SelectedRows.Count <> 0 Then
                If SprawdzenieDanych() Then
                    Zmien()
                End If
            Else
                MessageBox.Show("Nie zaznaczono drutu do zmiany.", "WIREMET")
            End If
        Else
            MessageBox.Show("Nie wprowadzono żadnych zmian.", "WIREMET")
        End If
    End Sub

    Private Sub cmdWyczysc_Click(sender As Object, e As EventArgs) Handles cmdWyczysc.Click
        WyczyscParametryKontroli()
        dgvInformacje.ClearSelection()
        dgvListaDoKontroli.ClearSelection()
        txtNumerDrutu.Text = String.Empty
    End Sub

    Private Sub cmdDrukuj_Click(sender As Object, e As EventArgs) Handles cmdDrukuj.Click

        If dgvInformacje.SelectedRows.Count > 0 Then
            Drukuj()
        Else
            MessageBox.Show("Wybierz drut.", "WIREMET")
        End If

    End Sub

    Private Sub cmdZakoncz_Click(sender As Object, e As EventArgs) Handles cmdZakoncz.Click

        Dim lvarFrme As New frmTrPozycjaZlecenia(txtInfKlient.Text, txtInfTerminRealizacji.Text, _pozycjaZlecenia.Id, 0, 0, False, True)
        With lvarFrme
            .ShowDialog()
        End With

    End Sub

    Private Sub cmdWysylka_Click(sender As Object, e As EventArgs) Handles cmdWysylka.Click
        Try
            Dim lvarFrm As New frmWysylka2(_pozycjaZlecenia.Zlecenie.Id, _pozycjaZlecenia.Id)
            With lvarFrm
                .MdiParent = MdiParent
                .Show()
            End With

        Catch ex As Exception
            MessageBox.Show(ex.Message, "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning)
        End Try
    End Sub



    Private Sub frmKontrola_Load(sender As Object, e As EventArgs) Handles Me.Load
        dgvListaDoKontroli.ClearSelection()
        dgvInformacje.ClearSelection()
    End Sub

    Private Sub frmProdukcja_FormClosed(sender As Object, e As FormClosedEventArgs) Handles Me.FormClosed
        'If Not mvarWyznTylkoDoOdczytu Then
        '    mvarBlokowanie.Unlock()
        'End If
        _unitOfWork.Dispose()
    End Sub


#Region "KeyPress"
    Private Sub txtNumerDrut_KeyPress(sender As Object, e As KeyPressEventArgs) Handles txtNumerDrutu.KeyPress
        If e.KeyChar = Microsoft.VisualBasic.ChrW(Keys.Return) Then
            If txtNumerDrutu.Text <> String.Empty And IsNumeric(txtNumerDrutu.Text) Then
                WyczyscParametryKontroli()
                ZnajdzDrut()
            Else
                MessageBox.Show("Podaj numer.", "WIREMET")
            End If
        End If
    End Sub


    Private Sub txtWymiarMin_KeyPress(sender As Object, e As KeyPressEventArgs) Handles txtWymiarMin.KeyPress
        If e.KeyChar = Microsoft.VisualBasic.ChrW(Keys.Return) Then
            txtWymiarMax.Focus()
        End If
    End Sub

    Private Sub txtWymiarMax_KeyPress(sender As Object, e As KeyPressEventArgs) Handles txtWymiarMax.KeyPress
        If e.KeyChar = Microsoft.VisualBasic.ChrW(Keys.Return) Then
            txtIlosc.Focus()
        End If
    End Sub

    Private Sub txtIlosc_KeyPress(sender As Object, e As KeyPressEventArgs) Handles txtIlosc.KeyPress
        If e.KeyChar = Microsoft.VisualBasic.ChrW(Keys.Return) Then
            cmbPakowanie.Focus()
        End If
    End Sub

    Private Sub cmbPakowanie_KeyPress(sender As Object, e As KeyPressEventArgs) Handles cmbPakowanie.KeyPress
        If e.KeyChar = Microsoft.VisualBasic.ChrW(Keys.Return) Then
            cmbZwickUstawienie.Focus()
        End If
    End Sub

    Private Sub cmbZwickUstawienie_KeyPress(sender As Object, e As KeyPressEventArgs) Handles cmbZwickUstawienie.KeyPress
        If e.KeyChar = Microsoft.VisualBasic.ChrW(Keys.Return) Then
            txtZwickPomiar.Focus()
        End If
    End Sub

    Private Sub txtZwickPomiar_KeyPress(sender As Object, e As KeyPressEventArgs) Handles txtZwickPomiar.KeyPress
        If e.KeyChar = Microsoft.VisualBasic.ChrW(Keys.Return) Then
            txtZwickProcentWydluzenia.Focus()
        End If
    End Sub

    Private Sub txtZwickProcentWydluzenia_KeyPress(sender As Object, e As KeyPressEventArgs) Handles txtZwickProcentWydluzenia.KeyPress

        If e.KeyChar = Microsoft.VisualBasic.ChrW(Keys.Return) Then
            If cmbZwickUstawienie.SelectedIndex <> -1 And txtWymiarMin.Text <> String.Empty And txtWymiarMax.Text <> String.Empty Then
                Select Case CType(cmbZwickUstawienie.SelectedItem, ZwickUstawienie).Id
                    Case 1 '2
                        txtZwickSila.Text = CStr(CDbl(txtZwickPomiar.Text.Trim()) * 0.2)
                        'Case 5
                        '    txtZwickSila.Text = CDbl(Trim(txtZwickPomiar.Text)) * 0.5
                    Case 2 '10
                        txtZwickSila.Text = CStr(CDbl(txtZwickPomiar.Text.Trim()) * 1)
                    Case 3 '20
                        txtZwickSila.Text = CStr(CDbl(txtZwickPomiar.Text.Trim()) * 2)
                    Case 4 '200
                        txtZwickSila.Text = CStr(CDbl(txtZwickPomiar.Text.Trim()) * 20)
                    Case 5 '500
                        txtZwickSila.Text = CStr(CDbl(txtZwickPomiar.Text.Trim()) * 50)
                    Case 6 '1000
                        txtZwickSila.Text = CStr(CDbl(txtZwickPomiar.Text.Trim()) * 100)
                    Case 7 '2000
                        txtZwickSila.Text = CStr(CDbl(txtZwickPomiar.Text.Trim()) * 200)
                    Case Else
                        txtZwickSila.Text = "i12*2"
                End Select

                If txtZwickPomiar.Text <> String.Empty Then

                    Dim zwickSila As Double = CDbl(txtZwickSila.Text.Trim())
                    Dim wymiarMin As Double = CDbl(txtWymiarMin.Text.Trim())
                    Dim wymiarMax As Double = CDbl(txtWymiarMax.Text.Trim())
                    Dim zwickWytrzymalosc As Double = Math.Round(4.0 * zwickSila / PI * ((wymiarMin + wymiarMax) / 2000.0) ^ -2, 0)

                    txtZwickWytrzymalosc.Text = zwickWytrzymalosc.ToString()

                End If
                txtUwagi.Focus()
            Else
                MessageBox.Show("Podaj wszystkie dane.", "WIREMET")
            End If
        End If
    End Sub


    Private Sub txtUwagi_KeyPress(sender As Object, e As KeyPressEventArgs) Handles txtUwagi.KeyPress
        If e.KeyChar = Microsoft.VisualBasic.ChrW(Keys.Return) Then
            chkGotowe.Focus()
        End If
    End Sub

    Private Sub chkGotowe_KeyPress(sender As Object, e As KeyPressEventArgs) Handles chkGotowe.KeyPress
        If e.KeyChar = Microsoft.VisualBasic.ChrW(Keys.Return) Then
            chkGotowe.Checked = True
            chkMagazyn.Focus()
        End If
    End Sub

    Private Sub chkMagazyn_KeyPress(sender As Object, e As KeyPressEventArgs) Handles chkMagazyn.KeyPress
        If e.KeyChar = Microsoft.VisualBasic.ChrW(Keys.Return) Then
            chkMagazyn.Checked = True
            chkMagazyn2.Focus()
        End If
    End Sub

    Private Sub chkMagazyn2_KeyPress(sender As Object, e As KeyPressEventArgs) Handles chkMagazyn2.KeyPress
        If e.KeyChar = Microsoft.VisualBasic.ChrW(Keys.Return) Then
            chkMagazyn2.Checked = True
            chkPoprawa.Focus()
        End If
    End Sub

    Private Sub chkPoprawa_KeyPress(sender As Object, e As KeyPressEventArgs) Handles chkPoprawa.KeyPress
        If e.KeyChar = Microsoft.VisualBasic.ChrW(Keys.Return) Then
            chkPoprawa.Checked = True
            cmdDodaj.Focus()
        End If
    End Sub

#End Region

#Region "Changed"

    Private Sub txtIlosc_TextChanged(sender As Object, e As EventArgs) Handles txtIlosc.TextChanged
        mvarChanged = True
    End Sub

    Private Sub cmbPakowanie_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cmbPakowanie.SelectedIndexChanged
        mvarChanged = True
    End Sub

    Private Sub txtWymiarMin_TextChanged(sender As Object, e As EventArgs) Handles txtWymiarMin.TextChanged
        mvarChanged = True
    End Sub

    Private Sub txtWymiarMax_TextChanged(sender As Object, e As EventArgs) Handles txtWymiarMax.TextChanged
        mvarChanged = True
    End Sub

    Private Sub txtWytrzymalosc_TextChanged(sender As Object, e As EventArgs)
        mvarChanged = True
    End Sub

    Private Sub txtUwagi_TextChanged(sender As Object, e As EventArgs) Handles txtUwagi.TextChanged
        mvarChanged = True
    End Sub

    Private Sub txtZwickPomiar_TextChanged(sender As Object, e As EventArgs) Handles txtZwickPomiar.TextChanged
        mvarChanged = True
    End Sub

    Private Sub txtZwickProcentWydluzenia_TextChanged(sender As Object, e As EventArgs) Handles txtZwickProcentWydluzenia.TextChanged
        mvarChanged = True
    End Sub

    Private Sub cmbZwickUstawienie_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cmbZwickUstawienie.SelectedIndexChanged
        mvarChanged = True
    End Sub

    Private Sub txtZwickWytrzymalosc_TextChanged(sender As Object, e As EventArgs) Handles txtZwickWytrzymalosc.TextChanged
        mvarChanged = True
    End Sub

    Private Sub txtZwickSila_TextChanged(sender As Object, e As EventArgs) Handles txtZwickSila.TextChanged
        mvarChanged = True
    End Sub


    Private Sub chkGotowe_CheckedChanged(sender As Object, e As EventArgs) Handles chkGotowe.CheckedChanged
        If chkGotowe.Checked Then
            chkMagazyn.Checked = False
            chkMagazyn2.Checked = False
            chkPoprawa.Checked = False
        End If
    End Sub

    Private Sub chkMagazyn_CheckedChanged(sender As Object, e As EventArgs) Handles chkMagazyn.CheckedChanged
        If chkMagazyn.Checked Then
            chkGotowe.Checked = False
            chkMagazyn2.Checked = False
            chkPoprawa.Checked = False
        End If
    End Sub

    Private Sub chkMagazyn2_CheckedChanged(sender As Object, e As EventArgs) Handles chkMagazyn2.CheckedChanged
        If chkMagazyn2.Checked Then
            chkGotowe.Checked = False
            chkMagazyn.Checked = False
            chkPoprawa.Checked = False
        End If
    End Sub

    Private Sub chkPoprawa_CheckedChanged(sender As Object, e As EventArgs) Handles chkPoprawa.CheckedChanged

        If chkPoprawa.Checked Then
            chkGotowe.Checked = False
            chkMagazyn.Checked = False
            chkMagazyn2.Checked = False

            Dim lvarFrme As New frmOpcjePoprawy()
            With lvarFrme
                .ShowDialog()
            End With

            If lvarFrme.chk1.Checked Then
                txtUwagi.Text = txtUwagi.Text & " " & lvarFrme.chk1.Text
            ElseIf lvarFrme.chk2.Checked Then
                txtUwagi.Text = txtUwagi.Text & " " & lvarFrme.chk2.Text
            ElseIf lvarFrme.chk3.Checked Then
                txtUwagi.Text = txtUwagi.Text & " " & lvarFrme.chk3.Text
            End If

        End If

    End Sub

    Private Sub chkEtykietaPolska_CheckedChanged(sender As Object, e As EventArgs) Handles chkEtykietaPolska.CheckedChanged
        If chkEtykietaPolska.Checked Then
            chkEtykietaZagraniczna.Checked = False
        End If
    End Sub

    Private Sub chkEtykietaZagraniczna_CheckedChanged(sender As Object, e As EventArgs) Handles chkEtykietaZagraniczna.CheckedChanged
        If chkEtykietaZagraniczna.Checked Then
            chkEtykietaPolska.Checked = False
        End If
    End Sub

#End Region


    Private Sub SparwdzenieStatusowSchematow()

        Dim wyzn As Boolean = False

        For Each schemat As Schemat In _pozycjaZlecenia.Schematy.Values
            For Each pozycja As PozycjaSchematu In schemat.PozycjeSchematu.Values
                If pozycja.OpcjaPozycjiSchematu.Id = 2 AndAlso pozycja.Status.Id = 6 Then
                    wyzn = True
                Else
                    wyzn = False
                    Exit For
                End If
            Next
        Next

        If wyzn Then
            _komunikat = "oraz wszystkie operacje są zakończone." & vbNewLine & "Czy zakończyć dane zlecenie?"
        End If
    End Sub

    Private Sub Zapisz()
        Try
            Dim repoPozycjaZlecenia As New Repository(Of PozycjaZlecenia)(_unitOfWork)
            Dim repoStatus As New Repository(Of OEM.Status)(_unitOfWork)
            Dim statusSpec As New IdSpecification(Of OEM.Status)(6)

            _unitOfWork.BeginTransaction()
            _pozycjaZlecenia.Status = repoStatus.GetEntityMatching(statusSpec)
            _unitOfWork.CommitTransaction()

        Catch ex As Exception
            MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
        End Try
    End Sub

    Private Sub btn_PobierzDrutDoKontroli_Click(sender As System.Object, e As System.EventArgs) Handles btn_PobierzDrutDoKontroli.Click
        UzupelnijDane()
    End Sub

End Class